存储函数与存储过程的区别

1. 读写权限不同

存储函数:设计之初的目的是只读的(但是实际并没有严格限制)
存储过程:可读可写

存储函数的读写权限这里要特殊说明一下:
创建存储函数的时候后,必须声明函数读写权限,且只能在DETERMINISTIC, NO SQL, or READS SQL DATA中选择。这三者的含义为确定性、无SQL语句、只对数据库进行读操作。
如果没有声明读写权限,就会报下面的错误:

ERROR 1418 (HY000): This function has none of DETERMINISTIC, NO SQL, or READS SQL DATA in its declaration and binary logging is enabled (you *might* want to use the less safe log_bin_trust_function_creators variable)

如果想不报错,除了声明参数还有一个办法,执行SET GLOBAL log_bin_trust_routine_creators = 1;命令来禁止掉对SUPER权限的要求。

注意:虽然存储函数的声明要求是只读的,但是却不会对函数中的语句进行检查,所有我们仍然可以在存储函数中进行写数据库的操作。

2. 返回不同

存储函数:必须有返回值
存储过程:返回值可有可无,通过OUT参数返回

3. 调用方式不同

存储函数:只能在sql语句中调用,比如:select function();
存储过程:只能单独调用,比如:call procedure();

总结

综上所述,可以看出存储函数与存储过程在设计上还是用不一样的地方

  • 存储函数:是为了计算一些东西
  • 存储过程:是一些sql语句的集合
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值